import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime
import os

# 读取Excel文件（假设数据结构与失业率.py类似）
file_path = 'dataset/三次产业贡献率.xlsx'
sheet_name = '季度数据'
df = pd.read_excel(file_path, sheet_name=sheet_name, header=2)  # 跳过前两行说明

# 提取指标名称（第一列）
indicators = df['指标'].tolist()

# 提取日期列（从第二列开始）
dates = df.columns[1:].tolist()
# 将"2025年第二季度"转为datetime对象（假设季度中点为15日）
date_objects = []
for date_str in dates:
    year, quarter = date_str.split('年')
    quarter = quarter.replace('第一季度', '-01-15').replace('第二季度', '-04-15')\
                    .replace('第三季度', '-07-15').replace('第四季度', '-10-15')
    date_objects.append(datetime.strptime(f"{year}{quarter}", "%Y-%m-%d"))

# 创建完整日期范围（从最早到最晚日期，每日频率）
start_date = min(date_objects)
end_date = max(date_objects)
all_dates = pd.date_range(start=start_date, end=end_date, freq='D')

# 创建空的DataFrame存储每日数据
full_daily_data = pd.DataFrame({'日期': all_dates})

# 对每个指标进行插值处理
for indicator in indicators:
    # 提取当前指标的季度数据
    quarterly_data = df[df['指标'] == indicator].iloc[:, 1:].T
    quarterly_data.columns = [indicator]
    
    # 创建临时DataFrame（季度数据）
    temp_df = pd.DataFrame({
        '日期': date_objects,
        indicator: quarterly_data[indicator].values
    })
    
    # 合并到完整日期范围
    temp_df = pd.merge(full_daily_data[['日期']], temp_df, on='日期', how='left')
    
    # 线性插值（填充每日数据）
    temp_df[indicator] = temp_df[indicator].interpolate(method='linear')
    
    # 填充首尾可能的NaN值
    temp_df[indicator] = temp_df[indicator].fillna(method='bfill').fillna(method='ffill')
    
    # 添加到完整数据集
    full_daily_data = pd.merge(full_daily_data, temp_df, on='日期', how='left')

# 保存插值后的每日数据到CSV
output_dir = 'dataset_csv'
if not os.path.exists(output_dir):
    os.makedirs(output_dir)
output_file = os.path.join(output_dir, '每日三次产业贡献率.csv')
full_daily_data.to_csv(output_file, index=False, encoding='utf-8-sig')

print(f'每日数据已保存至: {output_file}')

# 可选：绘制第一产业贡献率示例图
plt.figure(figsize=(12, 6))
plt.plot(
    full_daily_data['日期'], 
    full_daily_data['第一产业贡献率当季值(%)'],
    label='第一产业（插值后）', 
    linestyle='-', 
    color='green'
)
# 标记原始季度数据点
original_data = df[df['指标'] == '第一产业贡献率当季值(%)'].iloc[:, 1:].T
plt.scatter(
    date_objects, 
    original_data.values, 
    label='原始季度数据', 
    color='red', 
    zorder=5
)
plt.title('第一产业贡献率每日插值结果', fontsize=14)
plt.xlabel('日期', fontsize=12)
plt.ylabel('贡献率(%)', fontsize=12)
plt.legend()
plt.grid(True, linestyle='--', alpha=0.6)
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
plt.gcf().autofmt_xdate()
plt.savefig('/Users/linshangjin/25CCM/NKU-C/数据图表/第一产业贡献率插值示例.png', bbox_inches='tight', dpi=300)
plt.close()

print('处理完成！')